import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un menu en el cual el usuario puede elegir contra quien <p>
 * jugara o quienes han de jugar.
 * 
 * @author Miguel Martinez Aguilar
 * @version 18 de Mayo del 2013
 */
public class MenuJugador extends ScrollActor
{
    // Declaracion de variables de instancia
    private Jugador[] jugador;// es un arreglo de 2 jugadores.
    private InicioJuego comenzar;// es el boton de inicio del juego.
    private MenuJuego menu;// es el menu de juego.
    private BotonJug[] botizq;// es un arreglo de 4 botones en la izquierda.
    private BotonJug[] botder;// es un arreglo de 3 botones en la derecha.
    
    /**
     * Constructor de MenuJugador.
     * @param menu: el objeto MenuJuego al que hara referencia esta clase.
     */
    public MenuJugador(MenuJuego menu)
    {
        jugador = new Jugador[2];
        jugador[0] = null;
        jugador[1] = null;
        comenzar = new InicioJuego("comenzar",3,menu);
        this.menu = menu;
        botizq = new BotonJug[4];
        botizq[0] = new BotonJug("usuario",this,0,0);
        botizq[1] = new BotonJug("primero",this,1,0);
        botizq[2] = new BotonJug("segundo",this,2,0);
        botizq[3] = new BotonJug("tercero",this,3,0);
        botder = new BotonJug[3];
        botder[0] = new BotonJug("primero",this,1,1);
        botder[1] = new BotonJug("segundo",this,2,1);
        botder[2] = new BotonJug("tercero",this,3,1);
    }  
    
    /**
     * Este metodo prepara otros elementos del inicio del menu de jugadores por eleccion.
     */
    public void prepara() 
    {
        ScrollWorld mundo = super.getWorld();
        mundo.addObject(comenzar,this.getX() + 100,this.getY() + 135);
        for(int i = 0; i < 4; i++){
            if(botizq[i] != null)mundo.addObject(botizq[i],this.getX() - 150,this.getY() - 138 + (90 * i));
        }
        for(int i = 0; i < 3; i++){
            if(botder[i] != null)mundo.addObject(botder[i],this.getX() + 150,this.getY() - 138 + (90 * i));
        }
    }
    
    /**
     * Este metodo agrega los jugadores correspondientes.
     * @param izder: numero (0 o 1), que identica el lugar donde se agregara el jugador.
     * @param jugador: un jugador que sera agregado en el escenario.
     */
    public void agregaJugador(int izder, Jugador jugador) 
    {
        ScrollWorld mundo = super.getWorld();
        if(this.jugador[izder] != null)mundo.removeObject(this.jugador[izder]);
        this.jugador[izder] = jugador;
        if(izder == 0)mundo.addObject(this.jugador[0],this.getX() - 56,this.getY() - 48);
        else mundo.addObject(this.jugador[1],this.getX() + 56,this.getY() - 48);
    }
    
    /**
     * Este metodo quita las interfaces del menu de jugadores.
     * @param todo: boleano que indica si se borraran todas las interfaces.
     */
    public void quitarBotones(boolean todo) 
    {
        ScrollWorld mundo = super.getWorld();
        mundo.removeObject(comenzar);
        for(int i = 0; i < 4; i++)if(botizq[i] != null)mundo.removeObject(botizq[i]);
        for(int i = 0; i < 3; i++)if(botder[i] != null)mundo.removeObject(botder[i]);
        if(todo){
            if(jugador[0] != null)mundo.removeObject(jugador[0]);
            if(jugador[1] != null)mundo.removeObject(jugador[1]);
        }
        mundo.removeObject(this);
    }
    
    /**
     * Este metodo verifica si existen jugadores. <p>
     * Regresa un boleano que indica si existen.
     */
    public boolean hayJugadores() 
    {
        return (jugador[0] != null && jugador[1] != null);
    }
    
    /**
     * Este metodo entrega el primer jugador.
     */
    public Jugador jugador1() 
    {
        return jugador[0];
    }
    
    /**
     * Este metodo entrega el segundo jugador.
     */
    public Jugador jugador2() 
    {
        return jugador[1];
    }
}
